const Koa = require('koa');
const KoaRouter = require('koa-router');
const koaBodyParser = require('koa-bodyparser');

const app = new Koa();
const router = new KoaRouter();

// 定义一个内存数据库
const users = [];
let id = 1;

router.all('/', (ctx) => {
    ctx.body = 'Hi';
});

// 添加接口
// 解析请求体参数
router.post('/users', (ctx) => {
    // 解析参数
    // 获取请求体参数
    const data = ctx.request.body;
    // 保存到 users 数组内，以便后续获取
    users.push({ ...data, id });
    // 代码客户端，封装一个 mysql 客户端
    //
    // 添加成功
    ctx.body = {
        code: 200,
        message: '添加成功',
    };

    // 索引加 1
    id++;
    // 查看一下内存中是否存了这个数据
    console.log('users', users);
});

// 修改接口
// 解析请求体参数
router.put('/users/:id', (ctx) => {
    // 获取路径参数
    const { id } = ctx.params;
    // 获取请求体参数
    const data = ctx.request.body;
    // 找到这个要修改的用户
    const userIndex = users.findIndex((item) => item.id === Number(id));
    if (userIndex === -1) {
        ctx.body = {
            code: 404,
            message: '该用户不存在',
        };
        return;
    }
    // 修改，增量修改
    users[userIndex] = { ...users[userIndex], ...data };
    // 修改成功
    ctx.body = {
        code: 200,
        message: '修改成功',
    };
});

// 删除接口
// 解析路径参数
router.delete('/users/:id', (ctx) => {
    // 获取路径参数
    const params = ctx.params;
    const userIndex = users.findIndex((item) => item.id === Number(params.id));
    if (userIndex === -1) {
        ctx.body = {
            code: 404,
            message: '该用户不存在',
        };
        return;
    }
    users.splice(userIndex, 1);
    ctx.body = { code: 204, message: '删除成功' };
});

// 查询接口
// 解析查询参数
router.get('/users', (ctx) => {
    // 获取查询参数
    const query = ctx.query;
    // 给客户端响应
    ctx.body = {
        code: 200,
        data: users,
        message: '请求成功',
    };
});

// 使用这些中间件
app.use(koaBodyParser());
// 路由分发
app.use(router.routes());

// 监听端口，等待请求
app.listen(3000, () => {
    console.log('Koa Server running at http://localhost:3000');
});
